var express = require('express')
var router = express.Router()
var path = require('path')

// 获取验证模块
var authorization = require(path.join(process.cwd(), '/modules/authorization'))

// 通过验证模块获取用户管理服务
var mgrServ = authorization.getService('ManagerService')

// 查询用户列表
router.get(
  '/',
  // 验证参数
  function (req, res, next) {
    // 参数验证
    if (!req.query.pagenum || req.query.pagenum <= 0) return res.sendResult(null, 400, 'pagenum 参数错误')
    if (!req.query.pagesize || req.query.pagesize <= 0) return res.sendResult(null, 400, 'pagesize 参数错误')
    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    mgrServ.getAllManagers(
      {
        query: req.query.query,
        pagenum: req.query.pagenum,
        pagesize: req.query.pagesize
      },
      function (err, result) {
        if (err) return res.sendResult(null, 400, err)
        res.sendResult(result, 200, '获取管理员列表成功')
      }
    )(req, res, next)
  }
)

// 获取用户信息
router.get(
  '/:id',
  // 参数验证
  function (req, res, next) {
    if (!req.params.id) {
      return res.sendResult(null, 400, '用户ID不能为空')
    }
    if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, '用户ID必须是数字')
    next()
  },
  function (req, res, next) {
    mgrServ.getManager(req.params.id, function (err, manager) {
      if (err) return res.sendResult(null, 400, err)
      res.sendResult(manager, 200, '获取成功')
    })(req, res, next)
  }
)

// 创建用户
router.post(
  '/',
  // 验证参数
  function (req, res, next) {
    if (!req.body.username) {
      return res.sendResult(null, 400, '用户名不能为空')
    }
    if (!req.body.password) {
      return res.sendResult(null, 400, '密码不能为空')
    }
    if (!req.body.rid) {
      req.body.rid = -1
      // return res.sendResult(null,200,"角色ID不能为空");
    }
    if (isNaN(parseInt(req.body.rid))) req.body.rid = -1 // return res.sendResult(null,200,"角色ID必须是数字");
    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    params = {
      username: req.body.username,
      password: req.body.password,
      mobile: req.body.mobile,
      email: req.body.email,
      rid: req.body.rid
    }
    mgrServ.createManager(params, function (err, manager) {
      if (err) return res.sendResult(null, 400, err)
      res.sendResult(manager, 201, '创建成功')
    })(req, res, next)
  }
)

// 修改用户信息
router.put(
  '/:id',
  // 参数验证
  function (req, res, next) {
    if (!req.params.id) {
      return res.sendResult(null, 400, '用户ID不能为空')
    }
    if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, '用户ID必须是数字')
    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    mgrServ.updateManager(
      {
        id: req.params.id,
        mobile: req.body.mobile,
        email: req.body.email
      },
      function (err, manager) {
        if (err) return res.sendResult(null, 400, err)
        res.sendResult(manager, 200, '更新成功')
      }
    )(req, res, next)
  }
)

// 删除用户信息
router.delete(
  '/:id',
  // 验证参数
  function (req, res, next) {
    if (!req.params.id) return res.sendResult(null, 400, '用户ID不能为空')
    if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, 'ID必须是数字')
    if (req.params.id == 500) return res.sendResult(null, 400, '不允许删除admin账户')
    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    mgrServ.deleteManager(req.params.id, function (err) {
      if (err) return res.sendResult(null, 400, err)
      return res.sendResult(null, 200, '删除成功')
    })(req, res, next)
  }
)

// 分配用户角色
router.put(
  '/:id/role',
  // 参数验证
  function (req, res, next) {
    if (!req.params.id) {
      return res.sendResult(null, 400, '用户ID不能为空')
    }
    if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, '用户ID必须是数字')

    if (req.params.id == 500) return res.sendResult(null, 400, '不允许修改admin账户')

    if (!req.body.rid) res.sendResult(null, 400, '权限ID不能为空')
    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    mgrServ.setRole(req.params.id, req.body.rid, function (err, manager) {
      if (err) return res.sendResult(null, 400, err)
      res.sendResult(manager, 200, '设置角色成功')
    })(req, res, next)
  }
)

router.put(
  '/:id/state/:state',
  // 参数验证
  function (req, res, next) {
    if (!req.params.id) {
      return res.sendResult(null, 400, '用户ID不能为空')
    }
    if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, '用户ID必须是数字')

    // // // if(!req.params.state) {
    // // // 	return res.sendResult(null,400,"状态不能为空");
    // // // }
    // // if(isNaN(parseInt(req.params.state))) return res.sendResult(null,400,"状态必须是数字");
    // if(parseInt(req.params.state) != 0 && parseInt(req.params.state) != 1) return res.sendResult(null,400,"管理状态只能为0或1");

    next()
  },
  // 处理业务逻辑
  function (req, res, next) {
    state = 0
    if (req.params.state && req.params.state == 'true') state = 1
    mgrServ.updateMgrState(req.params.id, state, function (err, manager) {
      if (err) return res.sendResult(null, 400, err)
      res.sendResult(manager, 200, '设置状态成功')
    })(req, res, next)
  }
)

module.exports = router
